package com.way.demo.comm;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
 * @author lipingwei
 * @create 2021-01-21 13:33
 */
@Data
@Accessors(chain = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class R<T> implements Serializable {

    private static final long serialVersionUID = 5128865022108583223L;

    /**
     * 成功返回的code码为 0
     */
    private static final String successCode = "0";
    /**
     * 失败返回的code为 -1；
     */
    private static final String failureCode ="-1";

    /**
     * 状态码： 0:成功；
     *         -1：失败；
     */
    private String code;

    /**
     * 成功：true;
     * 失败：false;
     */
    private String success;

    /**
     * 返回成功，或失败的异常信息
     */
    private String msg;

    /**
     * 返回数据
     */
    private T data;



    /**
     * 成功返回数据
     * @param data
     * @return
     */
    public static <T> R<T> success(T data){
        R<T> r = new R();
        r.setData(data)
            .setCode(successCode)
            .setSuccess("true")
             .setMsg("成功");
        return  r;
    }

    /**
     * 成功返回
     * data 无返回值
     */
    public static <T> R<T> success(){

        return success(null);
    }

    /**
     * 返回失败
     */
    public static <T> R<T> failure(String errorCode, String errorMsg,T data){
        R<T> r = new R();
        r.setSuccess("false")
                .setCode(errorCode)
                .setMsg(errorMsg)
                .setData(data);
        return r;
    }

    /**
     * 失败
     */
    public static <T> R<T> failure(String errorCode, String errorMsg){
      return failure(errorCode,errorMsg,null);
    }

    public static <T> R<T> failure(ErrorEnum errorEnum){
        if(null== errorEnum.getErrorMsg()){
            //有问题
            return null;
        }
        return failure(errorEnum.getErrorCode(),errorEnum.getErrorMsg());
    }


}
